/**
 * 数据库配置文件
 * 
 * 此文件包含 MySQL 数据库连接配置和 mysqldump 备份选项配置
 * 所有配置项都支持通过环境变量进行覆盖，提供了合理的默认值
 * 
 * @author MySQL Backup Service
 * @version 1.0.0
 */

// 加载环境变量配置
require('dotenv').config();

/**
 * 数据库连接和备份配置对象
 * 
 * 包含数据库连接参数和 mysqldump 工具的详细选项配置
 * 这些配置确保备份的完整性和一致性
 */
const databaseConfig = {
    // ========== 数据库连接配置 ==========
    
    /**
     * 数据库主机地址
     * @type {string}
     * @default 'localhost'
     * @env DB_HOST
     */
    host: process.env.DB_HOST || 'localhost',
    
    /**
     * 数据库端口号
     * @type {number}
     * @default 3306
     * @env DB_PORT
     */
    port: parseInt(process.env.DB_PORT) || 3306,
    
    /**
     * 数据库用户名
     * @type {string}
     * @default 'root'
     * @env DB_USER
     */
    user: process.env.DB_USER || 'root',
    
    /**
     * 数据库密码
     * @type {string}
     * @required
     * @env DB_PASSWORD
     */
    password: process.env.DB_PASSWORD,
    
    /**
     * 数据库名称
     * @type {string}
     * @required
     * @env DB_NAME
     */
    database: process.env.DB_NAME,
    
    // ========== mysqldump 备份选项配置 ==========
    
    /**
     * mysqldump 工具的详细选项配置
     * 这些选项确保备份的完整性、一致性和可恢复性
     * 
     * @type {Object}
     */
    dumpOptions: {
        /**
         * 使用单一事务进行备份
         * 确保备份数据的一致性，特别是在 InnoDB 表中
         * 在备份开始时启动事务，确保所有表在同一时间点的状态
         * 
         * @type {boolean}
         * @default true
         */
        'single-transaction': true,
        
        /**
         * 包含存储过程和函数
         * 备份数据库中的所有存储过程、函数等例程
         * 
         * @type {boolean}
         * @default true
         */
        'routines': true,
        
        /**
         * 包含触发器
         * 备份数据库中的所有触发器定义
         * 
         * @type {boolean}
         * @default true
         */
        'triggers': true,
        
        /**
         * 使用完整的 INSERT 语句
         * 生成包含列名的完整 INSERT 语句，提高兼容性
         * 例如: INSERT INTO table (col1, col2) VALUES (val1, val2)
         * 
         * @type {boolean}
         * @default true
         */
        'complete-insert': true,
        
        /**
         * 禁用扩展插入
         * 每个 INSERT 语句只插入一行数据，提高可读性和兼容性
         * 虽然会增加文件大小，但便于调试和部分恢复
         * 
         * @type {boolean}
         * @default false
         */
        'extended-insert': false,
        
        /**
         * 不锁定表
         * 避免在备份过程中锁定表，减少对生产环境的影响
         * 与 single-transaction 配合使用效果更佳
         * 
         * @type {boolean}
         * @default false
         */
        'lock-tables': false,
        
        /**
         * 添加 DROP TABLE 语句
         * 在每个 CREATE TABLE 语句之前添加 DROP TABLE IF EXISTS
         * 确保恢复时能够重新创建表结构
         * 
         * @type {boolean}
         * @default true
         */
        'add-drop-table': true,
        
        /**
         * 禁用键检查
         * 在导入时添加 ALTER TABLE table DISABLE KEYS
         * 提高大数据量恢复的性能
         * 
         * @type {boolean}
         * @default true
         */
        'disable-keys': true,
        
        /**
         * WHERE 条件配置
         * 可以为特定表添加 WHERE 条件来过滤数据
         * 格式: { 'table_name': 'WHERE condition' }
         * 
         * @type {Object}
         * @default {}
         * 
         * 示例用法:
         * {
         *   'users': 'created_at >= "2023-01-01"',
         *   'logs': 'log_level = "ERROR"'
         * }
         */
        'where': {}
    }
};

/**
 * 导出数据库配置对象
 * 
 * 此配置对象将被备份服务和其他需要数据库连接的模块使用
 * 包含了完整的连接参数和优化的 mysqldump 选项
 */
module.exports = databaseConfig; 